import numpy as np
import matplotlib.pyplot as plt

fig, axes = plt.subplots(1, 3)
# x为两个向量的差距值
x = np.linspace(-4, 4, 20)


# 对于高斯、矩形、epanechnikov 相似性函数来说
# 只有当两个向量距离值差距越小，相似性就越高，但实际的注意力机制的选择上
# 更偏向余弦函数。

def gaussian_similarity(x, var=1):
    return np.exp(-1 / (2 * var ** 2) * x ** 2)


def rect_similarity(x):
    return np.where(np.abs(x) < 1, 1, 0)


def epanechnikov_similarity(x):
    return np.where(0 > 1 - np.abs(x), 0, 1 - np.abs(x))


axes[0].plot(x, gaussian_similarity(x))
axes[1].plot(x, rect_similarity(x))
axes[2].plot(x, epanechnikov_similarity(x))
plt.show()
